package com.liqi.frame.comm.service;


import com.liqi.frame.comm.dto.MenuDto;

import java.util.List;

/**
 * 菜单服务接口
 * @author liqi on 2017/12/20.
 * liqiwork@qq.com
 */
public interface MenuService {
    /**
     * 取得所有菜单对象的列表
     * @return 菜单对象的列表
     */
    List<MenuDto> getMenuList();

    /**
     * 取得当前用户的甩有菜单
     * @return 菜单列表
     */
    List<MenuDto> getMenuListByCurrUser();

    /**
     * 取得指定用户id的所有菜单
     * @param userId 用户id
     * @return 菜单列表
     */
    List<MenuDto> getMenuListByUserId(String userId);

    /**
     * 取得指定用户名称的所有菜单
     * @param username 用户名称
     * @return 菜单列表
     */
    List<MenuDto> getMenuListByUsername(String username);

    /**
     * 取得指定角色id的所有菜单
     * @param roleId 角色id
     * @return 菜单列表
     */
    List<MenuDto> getMenuListByRoleId(String roleId);

    /**
     * 取得指定菜单关键字的菜单
     * @param menuKey 菜单关键字
     * @return 菜单列表
     */
    List<MenuDto> getMenuListByKey(String menuKey);

    /**
     * 取得指定id的菜单
     * @param id 菜单id
     * @return 菜单
     */
    MenuDto getMenuById(String id);

    /**
     * 取得指定菜单名称的菜单
     * @param menuName 菜单名称
     * @return 菜单
     */
    List<MenuDto> getMenuListWithName(String menuName);

    /**
     * 插入菜单
     * @param id 菜单id
     * @param menuKey 菜单关键字
     * @param menuName 菜单名称
     * @param parentId 父菜单id
     * @param level 菜单级别
     * @param comment 说明
     * @param orderId 序号
     * @param target 菜单打开方式
     * @param href 菜单链接
     * @return 结果
     */
    int insertMenu(String id,
                   String menuKey,
                   String menuName,
                   String parentId,
                   Integer level,
                   String comment,
                   Float orderId,
                   String target,
                   String href);

    /**
     * 修改提定id的菜单信息
     * @param id 菜单id
     * @param menuKey 菜单关键字
     * @param menuName 菜单名称
     * @param parentId 父菜单id
     * @param level 菜单级别
     * @param comment 说明
     * @param orderId 序号
     * @param target 菜单打开方式
     * @param href 菜单链接
     * @return 结果
     */
    int updateMenu(String id,
                   String menuKey,
                   String menuName,
                   String parentId,
                   Integer level,
                   String comment,
                   Float orderId,
                   String target,
                   String href);

    /**
     * 删除指定id的菜单
     * @param id 菜单id
     * @return 删除结果
     */
    int deleteMenuById(String id);

    /**
     * 删除指定父菜单下的所有子菜单
     * @param parentId 父菜单id
     * @return 删除结果
     */
    int deleteMenuListByParentId(String parentId);
}
